# ①面向对象-封装 权限控制
class Student:

    #收尾双下划线
    def __init__(self,name,age,gender):
        self._name = name # 单下划线 受保护的 只能本类和子类访问
        self.__age = age # 双下划线 私有的 只能类本身去访问
        self.gender = gender # 啥也不加 普通的 类的内部外部子类都可访问

    def _fun1(self):
        print('受保护的方法')

    def __fun2(self):
        print('私有的方法')

    def show(self):
        print('--------普通的方法--------')
        self._fun1() # 类本身访问受保护的方法
        self.__fun2() # 类本身访问私有的的方法
        print(self._name) # 受保护的属性
        print(self.__age) # 私有的属性

stu = Student('wez',10,'男')
print(stu._name,stu.gender)
# print(stu.__age) # 访问不了 出了类本身

stu._fun1()
# stu.__fun2() # 访问不了 出了类本身

# 访问私有属性和方法的办法(强制访问，不推荐使用，推荐class5的办法)
print(stu._Student__age)
stu._Student__fun2()

stu.show()

print('-'*30)
print(dir(stu))




